iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0
DevOps

在OpenStack Neutron的ovn-networking裡挖呀挖呀挖系列 第 24

Day-24: VM 直接利用實體網路上網

  • 分享至 

  • xImage
  •  

到目前,OpenStack上的VM,必需透過Router連接External Network,由OVN進行SNAT或DNAT,才能夠實現上網的行為。又因為Floating IP是採用DNAT的原理實現,在VM裡面,我們看不到實際使用的Public IP。有時候我們會希望VM的網路卡設定,看起來如同實際主機一樣可以看到Public IP的設定。如果有這種需求,建立VM時,可以讓VM直接使用 External Network,而不是使用一般的Internal Network,讓VM可以直接透過External Network上網,而不用經過Router做NAT轉換。

要讓VM直接用實體網路上網,前提必需在每個computer node上要有br-ex。要完成這個設定,可以透過packstack參數--os-neutron-ovn-bridges-compute=br-eth2,br-ex來達到。完整的packstack指令為:

packstack                                                        \
  --nova-libvirt-virt-type=kvm                                 \
  --keystone-admin-passwd=password                             \
  --os-debug-mode=y                                            \
  --provision-demo=n                                           \
  --os-cinder-install=n                                        \
  --os-swift-install=n                                         \
  --os-aodh-install=n                                          \
  --os-ceilometer-install=n                                    \
  --os-horizon-install=n                                       \
  --os-neutron-ml2-type-drivers=flat,vlan                      \
  --os-neutron-ml2-vlan-ranges=flat0:3001:4000                 \
  --os-neutron-ml2-flat-networks=*                             \
  --os-neutron-ml2-tenant-network-types=' '                    \
  --os-neutron-ml2-mechanism-drivers=ovn                       \
  --os-neutron-l2-agent=ovn                                    \
  --os-neutron-ovn-bridge-mappings=extnet0:br-ex,flat0:br-eth2 \
  --os-neutron-ovn-bridge-interfaces=br-ex:eth0,br-eth2:eth2   \
  --os-neutron-ovn-bridges-compute=br-eth2,br-ex               \
  --os-neutron-ovn-tunnel-if=eth1                              \
  --os-controller-host=192.168.33.10                           \
  --os-network-hosts=192.168.33.10                             \
  --os-compute-hosts=192.168.33.20,192.168.33.30               \
  --install-hosts=192.168.33.10,192.168.33.20,192.168.33.30

至於為什麼要讓br-ex在每個compute node上都存在才可以直接用實體網路上網,我們等會兒看到節點上bridge的長像再說明。


建立Flat Network

我們先來比較一下今天的架構和之前的架構相差的地方:

  1. Day-17: Flat Tenant Network相比:今天External Network使用的provider network 是extnet0,而extnet0是使用br-ex,而br-ex會使用eth0由VirtualBox的gateway上網。
  2. Day-21: Router 連接External Network相比: 今天vm_1是直接使用Exernal Network,而不是使用Geneve Network, 再透過Router做NAT上網。

gh

  1. 建立Flat External Network
openstack network create --provider-network-type flat --provider-physical-network extnet0 ext_n1 \
--external

# for VirtualBox
SUBNET_RANGE=10.0.2.0/24
GATEWAY=10.0.2.2
ALLOCATION_RANGE=start=10.0.2.210,end=10.0.2.220


openstack subnet create  --subnet-range ${SUBNET_RANGE} --network ext_n1 ext_n1subnet \
--gateway         ${GATEWAY} \
--allocation-pool ${ALLOCATION_RANGE}
  1. 建立instance
IMAGE_ID=$(openstack image show cirros --format json | jq -r .id)

openstack server create --nic net-id=ext_n1  --flavor m1.nano --image $IMAGE_ID  vm_1
  1. 查看OpenStack上Network 與 Port的資訊,確實與圖中預期要建立的長像是相同的
# Network
openstack network  list --long -c ID -c "Network Type" -c "Router Type" | abbrev

+--------+--------------+-------------+
| ID     | Network Type | Router Type |
+--------+--------------+-------------+
| 765501 | flat         | External    |
+--------+--------------+-------------+
openstack port  list --long -c ID -c "Fixed IP Addresses" -c "Device Owner" | abbrev

+--------+---------------------------------------------+---------------------+
| ID     | Fixed IP Addresses                          | Device Owner        |
+--------+---------------------------------------------+---------------------+
| 6a57bd | ip_address='10.0.2.216', subnet_id='f184ca' | compute:nova        |
| 06dfae | ip_address='10.0.2.210', subnet_id='f184ca' | network:distributed |
+--------+---------------------------------------------+---------------------+

OpenStack 與OVN 元件關係

gh

查看North Bound DB的情況,與Day-17: Flat Tenant Network相比,完全都相同,只是provider network改為使用extnet0而不是flat0.


OVN logical switch 和 compute node的關係

我們複習Day-21: Router 連接External Network的bridge架構,在compute-01上的VM,透過geneve tunnel將對外的封包送到network-conoroller 後,由network-conoroller的eth0到Internet。換句話說,如果是透過Router連接External Network,封包會統一由network-conoroller進出,所以只需要在network-conoroller有br-ex bridge。

但是,如果是讓VM直接使用External Network,則必需在每個Compute node上都建立br-ex,這個概念和建立Flat Network時,會使用到每個compute node上的br-eth2 bridge相同,才能讓不同compute node上的VM互通。只是現在是改用br-ex bridge,且br-ex bridge所使用的eth0介面的網路上有一個對外的gateway。因此,VM要上網的封包,直接透過compute node上的eth0,由實體網路的gateway出去,而不用經過network-controller。

照一般常見的架構,在實驗環境裡的三個節點的eth0,應該都要在同一個網段,一旦建立使用eth0的Flat External Network後,在這個Flat External Network的VM都可以上網,彼此間也可以直接通訊。但是,因為VirtualBox建立的每個VM的eth0是獨立的NAT網路,所以在我們今天的實驗環境裡,多個VM是無法透過今天建立的Flat External Network互通。

gh


連通性討論

我們在compute-1上分別對br-ex用的eth0與geneve tunnel用的eth1抓封包,可以看到VM對外的封包,直接經由compute-01的eth0經由VirtualBox的gateway出去;且在geneve tunnel上,則看不到任何的封包。

tcpdump -i eth0 -n  icmp

04:33:10.500177 IP 10.0.2.15 > 8.8.8.8: ICMP echo request, id 3, seq 1, length 64
04:33:10.508025 IP 8.8.8.8 > 10.0.2.15: ICMP echo reply, id 3, seq 1, length 64
tcpdump -vvneei eth1 'udp port 6081' # 在geneve tunnel 無封包

上一篇
Day-23: Security Group 原理
下一篇
Day-25: Network Node的 HA
系列文
在OpenStack Neutron的ovn-networking裡挖呀挖呀挖30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言